<?php

namespace Modules\Shop\Entities;

use Illuminate\Database\Eloquent\Model;
use houdunwang\arr\Arr;
class Category extends Model
{
    protected $guarded = [];

    /**
     * 模型关联
     */
    public function fenlei(){
        //第一个参数是被关联的模型
        //第二个参数是要关联表的外键
        //第三个参数是内键
        //在这里是多对一反向关联 所以第二个参数要和第三个参数调换位置(内键和外键)
        return $this->belongsTo(Category::class,'pid','id');
    }

    /**
     * 获取梳妆分类数据
     */
//        参数                   说明
//        $data                 一定只能是数组,不能是对象,数据应该是所有分类
//        $title                需要处理的字段名称
//        $fieldPri             当前表的主键id
//        $fieldPid             当前表的父级id
    public static function getTreeCategory($cate = null){
        //dd(111);
        //获取所有分类数据
        $data = self::get();
        //判断,$cate是否为null,如果不为null,就代表着我使用该方法的时候传递一个分类的数据对象进来
        if (!is_null($cate)) {
            foreach ($data as $k => $v) {
                //找到当前修改的分类的父级数据,给父级加上选中效果
                $data[$k]['_selected'] = $cate['pid'] == $v['id'];
                //修改的时候,自己不能选择自己作为自己的父级,所以,应该在所有数据中,找到当前修改的数据,然后加上不可选择的属性
                $data[$k]['_disabled'] = $cate['id'] == $v['id'] || Arr::isChild(
                        $data,
                        $v['id'],
                        $cate['id'],
                        'id',
                        'pid'
                    );
            }
        }
        $category = Arr::tree($data ? $data->toArray() : [], 'cname', 'id', 'pid');
        //将处理后的数据返出去
        return $category;
    }


    /**
     * 判断某个分类是否有子分类
     * @param $cate
     * @return mixed
     */
    public static function hasChildCategory($cate){
        //获取所有分类数据
        $data = self::get();
        //如果$cate有子分类,返回真,如果没有子分类,返回假
        return Arr::hasChild($data, $cate['id'], 'pid');
//参数                         说明
//data                      	操作的数组
//cid                      	需要操作的分类id
//fieldPid                  	父级 ID 键名
    }
}
